package com.shuda.common.entity;

import com.baomidou.mybatisplus.annotation.*;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 基础实体类，提供通用主键与审计字段。
 *
 * 字段包含：
 * - id：主键ID
 * - createdAt/updatedAt：创建/更新时间
 * - createdBy/updatedBy：创建/更新人
 * - deleted：逻辑删除标志
 *
 * 所有字段提供显式的getter/setter，避免在编译环境中因Lombok未生效造成方法缺失。
 *
 * @author ink
 * @Description: 基础实体类
 * @date 2025-11-09 10:15
 */
public class BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    
    @TableId(type = IdType.AUTO)
    private Long id;
    
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
    
    @TableField(fill = FieldFill.INSERT)
    private Long createdBy;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updatedBy;
    
    @TableLogic
    private Integer deleted;

    /**
     * 获取主键ID
     * @return 主键ID
     */
    public Long getId() { return id; }

    /**
     * 设置主键ID
     * @param id 主键ID
     */
    public void setId(Long id) { this.id = id; }

    /**
     * 获取创建时间
     * @return 创建时间
     */
    public LocalDateTime getCreatedAt() { return createdAt; }

    /**
     * 设置创建时间
     * @param createdAt 创建时间
     */
    public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }

    /**
     * 获取更新时间
     * @return 更新时间
     */
    public LocalDateTime getUpdatedAt() { return updatedAt; }

    /**
     * 设置更新时间
     * @param updatedAt 更新时间
     */
    public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; }

    /**
     * 获取创建人
     * @return 创建人
     */
    public Long getCreatedBy() { return createdBy; }

    /**
     * 设置创建人
     * @param createdBy 创建人
     */
    public void setCreatedBy(Long createdBy) { this.createdBy = createdBy; }

    /**
     * 获取更新人
     * @return 更新人
     */
    public Long getUpdatedBy() { return updatedBy; }

    /**
     * 设置更新人
     * @param updatedBy 更新人
     */
    public void setUpdatedBy(Long updatedBy) { this.updatedBy = updatedBy; }

    /**
     * 获取逻辑删除标志
     * @return 删除标志（0未删除，非0已删除）
     */
    public Integer getDeleted() { return deleted; }

    /**
     * 设置逻辑删除标志
     * @param deleted 删除标志（0未删除，非0已删除）
     */
    public void setDeleted(Integer deleted) { this.deleted = deleted; }
}